package com.zgscwjm.taobaphelper.xp;

import android.content.Context;
import android.util.Log;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zgscwjm.taobaphelper.b.a;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;


/**
 * Created by fukunaka on 2017/3/17.
 */

public class DSParams {

    public static final String TAG = "DSParams";
    static String configDir = "/data/local/tmp/dsconfigs/";
    static String defaultConfigFile = "default.config.json";
    static com.alibaba.fastjson.JSONObject defaultConfigValues = new com.alibaba.fastjson.JSONObject();
    static String deviceInfoFileName = "device.info.json";
    public static DSTopManager[] initManangers = new DSTopManager[]{new DSApkManager(), new DSBuildMananger(), new DSSettingManager(), new DSTelephonyManager(), new DSWifiManager(), new DSCdmaManager(), new DSGsmCellManager(), new DSRTBuildManager()};
    static String originConfigFile = "origin.config.json";
    static JSONObject originJsonConfig = null;


    public static JSONObject ensureData(Context context) {
        if (!DSUtils.isEmpty(defaultConfigValues)) {
            return defaultConfigValues;
        }
        String str = " before load config, value size [%d]";
        Object[] objArr = new Object[1];
        objArr[0] = Integer.valueOf(defaultConfigValues == null ? 0 : defaultConfigValues.size());
        DSLogger.infos(str, objArr);
        String readDefaultConfigFile = readDefaultConfigFile();
        if (StringUtils.isBlank(readDefaultConfigFile)) {
            DSLogger.info(" no content  for default config file", new Object[0]);
        } else {
            defaultConfigValues = JSON.parseObject(readDefaultConfigFile);
        }
        str = " after load config size value map size [%d]";
        objArr = new Object[1];
        objArr[0] = Integer.valueOf(defaultConfigValues == null ? 0 : defaultConfigValues.size());
        DSLogger.infos(str, objArr);
        DSLogger.info(" config value map:" + defaultConfigValues, new Object[0]);
        if (!DSUtils.isEmpty(defaultConfigValues)) {
            return defaultConfigValues;
        }
        loadDataByDevice(context, defaultConfigValues);
        str = " after load device config size, value map size [%d]";
        objArr = new Object[1];
        objArr[0] = Integer.valueOf(defaultConfigValues == null ? 0 : defaultConfigValues.size());
        DSLogger.infos(str, objArr);
        return defaultConfigValues;
    }

    public static void ensureOriginData(Context context) {
        String str = originConfigFile;
        boolean i = a.i(configDir + str);
        DSLogger.info(" exist origin config file: >>> " + i, new Object[0]);
        if (!i) {
            loadDataByDevice(context, defaultConfigValues);
            DSLogger.info(" write res :" + a.a(configDir + str, defaultConfigValues.toString()), new Object[0]);
        }
    }

    public static Object fetchValue(String str) {
        return defaultConfigValues.get(str);
    }

    public static Object fetchValue(DSTopManager.HMethods hMethods) {
        return fetchValue(hMethods.name());
    }

    public static JSONObject fetchValues() {
        return defaultConfigValues;
    }

    public static void loadDataByDevice(Context context, JSONObject jSONObject) {
        for (DSTopManager dSTopManager : initManangers) {
            DSLogger.info(" load class :" + dSTopManager.getClass(), new Object[0]);
            dSTopManager.initData(context, jSONObject);
        }
    }

    public static void loadDefaultConfigJson(JSONObject jSONObject) {
        String readDefaultConfigFile = readDefaultConfigFile();
        if (StringUtils.isBlank(readDefaultConfigFile)) {
            DSLogger.info(" no content  for default config file", new Object[0]);
        } else {
            JSON.parseObject(readDefaultConfigFile);
        }
    }

    public static void loadDefualtConfigJson() {
        String readDefaultConfigFile = readDefaultConfigFile();
        if (StringUtils.isBlank(readDefaultConfigFile)) {
            DSLogger.info(" no content  for default config file", new Object[0]);
        } else {
            defaultConfigValues = JSON.parseObject(readDefaultConfigFile);
        }
    }

    public static void loadOnStart() {
        if (DSUtils.isEmpty(defaultConfigValues)) {
            Log.i(TAG, " load on start config dir :" + configDir);
            a.mkdir(configDir);
            loadDefualtConfigJson();
        }
    }

    public static String readDefaultConfigFile() {
        String b = a.cat(configDir + defaultConfigFile);
        DSLogger.info(" load from file[" + defaultConfigFile + "] with size :" + defaultConfigValues.size(), new Object[0]);
        DSLogger.info(" file path : %s", r0);
        return b;
    }

    public static JSONObject readOriginConfig() {
        if (originJsonConfig != null) {
            return originJsonConfig;
        }
        JSONObject parseObject = JSON.parseObject(a.cat(configDir + originConfigFile));
        originJsonConfig = parseObject;
        return parseObject;
    }

    public static void writeAndSave(Context context, JSONObject jSONObject) {
        DSLogger.info(" value map :" + jSONObject, new Object[0]);
        String a = a.a(configDir + defaultConfigFile, jSONObject.toString());
        DSLogger.infos(" write file :%s", a);
    }

    public static void writeAndSave(Context context, String str) {
        writeAndSave(context, JSON.parseObject(str));
    }

    static void writeFileData(File file) {
        try {
            FileUtils.writeStringToFile(file, defaultConfigValues.toString());
        } catch (IOException e) {
            e.printStackTrace();
            Log.e(TAG, e.getMessage());
        }
    }
}

